Skip to content
掌握度

对比 JavaGuide《AI Agent 记忆系统》 与二哥记忆系列(为什么 LLM 没记忆、短期/长期记忆怎么实现、Claude Code 与 Codex 的实现、CLAUDE.md 怎么写、Agent 为什么变笨),及小林《记忆机制》《长短期记忆》。

多版对比 ​

为什么没记忆​:二哥的表述最准——LLM 无状态,「记忆」是每轮把 messages 数组重发一遍的工程假象​;参数里的知识冻结在训练截止日。这直接推出两层记忆:短期(Session 级,靠上下文窗口)和长期(跨 Session,外部存储),二哥的比喻是短期是内存、长期是磁盘。

长期记忆闭环​:二哥四步(提取→存储→检索→注入)够答面试;JavaGuide 补到六环(加巩固、反思、遗忘),遗忘用「相关度 × 重要度 × 时间衰减」打分——这是拉开差距的部分。

检索路线,立场不同​:二哥观察 Claude Code 零向量零 embedding——把记忆索引全文塞进上下文靠模型注意力捞(够用但依赖索引极短,200 行内);OpenClaw 改成 SQLite + 向量 + 关键词混合但变慢。JavaGuide 直接给工程结论:自由文本记忆量大了必须上混合检索(BM25 + 向量 + Reranker)。​两边其实统一于一个约束:记忆量小靠注意力,量大靠检索​。

产品实现细节(二哥独有,好素材)​​:Claude Code 83% 容量触发自动压缩,子 Agent 按摘要模板生成、重注入最近文件和工具定义并插边界标记;Codex 长期记忆存 SQLite 按「使用次数 + 最近使用」排序、写入前脱敏。CLAUDE.md 行数冲突:二哥说官方建议 80 行内(引了 500 条指令下最强模型准确率仅 68% 的论文),JavaGuide 写 200 行内——口径是「越短越好」,行数随版本变,答判断别答数字​。

小林​:分法更细——四层记忆​(感知记忆当次输入 / 短期 = 上下文工作台 / 长期 = 档案室 / 实体记忆 = 结构化病历卡,信息密度最高),并主动标注是工程划分非学术标准。长期记忆分情节、语义、程序三类,独有「抽象提炼」:把多条情节记忆用 LLM 蒸馏成语义规律(三次「requests 抓不到动态页面」的情节,蒸馏成一条「该用 Playwright」)。三个工程判据也好用:存什么(「下次任务开始时,知道它会让 Agent 做得更好吗」)、怎么存(结构化偏好走关系库精确查、非结构化走向量检索)、粒度(一次完整交互或一个独立知识点,太细碎片化、太粗有噪音)。框架对比也全:Mem0(去重与冲突消解)、Letta/MemGPT(操作系统式内存分层,Agent 自己调工具管记忆)、Zep(时序知识图谱)。

结论​:两层框架(内存/磁盘)开场,量决定检索方案的判断收尾,中间用小林的四层分法和「存什么」判据展示工程颗粒度。

最优题解 ​

LLM 本身没有记忆:它是无状态的,所谓记忆是每轮重发对话历史的工程假象,参数知识又冻结在训练截止日。所以记忆全靠外挂,分两层:短期记忆就是上下文窗口本身,长任务靠摘要压缩撑住;长期记忆是跨会话的外部存储,闭环四步——提取、存储、检索、注入,成熟方案还会加遗忘和反思,比如按「相关度 × 重要度 × 衰减」清掉低分记忆。

检索怎么选取决于量:记忆条目少(几十条)直接把索引全塞上下文,靠模型注意力就够了;量大了必须上 BM25 + 向量 + Reranker 混合检索,再加去重和权限隔离。产品里可以看 Claude Code 的取舍——它宁可维护 200 行以内的索引靠注意力,也不上向量库,就是拿「维护成本」换「链路简单」。

追问链 ​

追问:Agent 聊着聊着变笨是怎么回事?​ 参考答:Context Rot——上下文越长,模型对每条信息的利用率越低,加上中间位置的信息容易被忽略(Lost in the Middle),所以不是模型变小了,是窗口里的信号被稀释了。对策:压缩历史、一线程一事、重要约束写进系统提示免被压缩掉。

追问:长期记忆和 RAG 什么关系?​ 参考答:技术同源(都是外部存储 + 检索注入),区别在内容——RAG 管共享的客观知识,记忆管个性化的经验偏好;成熟系统分开召回再统一重排,别混一个库。

我的理解 ​

记忆这题最值钱的判断是「记忆量决定检索方案」——它把二哥的产品观察和 JavaGuide 的工程结论统一到一个约束下。CLAUDE.md 80 行还是 200 行的冲突提醒我:​产品文档里的数字随版本漂移,面试答判断(越短越好、按需加载)永远比答数字稳​。

本站仅供个人学习使用,请勿外传